1 /* 2 Copyright: Marcelo S. N. Mancini (Hipreme|MrcSnm), 2018 - 2021 3 License: [https://creativecommons.org/licenses/by/4.0/|CC BY-4.0 License]. 4 Authors: Marcelo S. N. Mancini 5 6 Copyright Marcelo S. N. Mancini 2018 - 2021. 7 Distributed under the CC BY-4.0 License. 8 (See accompanying file LICENSE.txt or copy at 9 https://creativecommons.org/licenses/by/4.0/ 10 */ 11 module hip.hipaudio.backend.openal.clip; 12 13 version(OpenAL): 14 import hip.audio_decoding.audio; 15 import hip.hipaudio.audio; 16 import hip.hipaudio.audiosource; 17 import hip.hipaudio.backend.openal.player; 18 import bindbc.openal; 19 import hip.hipaudio.backend.openal.al_err; 20 21 /** 22 * OpenAL Buffer works in the following way: 23 * If the buffer is streamed, it won't be owned by any source, so it will have total control 24 * over itself. That way, it can be reused by any source. 25 * 26 * Else, the buffer will be owned by the source for decoding, updating, and pulling data. 27 * 28 */ 29 public class HipOpenALClip : HipAudioClip 30 { 31 this(IHipAudioDecoder decoder, HipAudioClipHint hint){super(decoder, hint);} 32 this(IHipAudioDecoder decoder, HipAudioClipHint hint, uint chunkSize){super(decoder, hint, chunkSize);} 33 34 override void onUpdateStream(ubyte[] data, uint decodedSize){} 35 36 /** Allocates ALuint in the bufferwrapper */ 37 override HipAudioBufferWrapper createBuffer(ubyte[] data) 38 { 39 // import hip.console.log; 40 HipAudioBufferWrapper w; 41 alGenBuffers(1, &w.buffer.al); 42 alCheckError("Error generating OpenAL Buffer"); 43 hasBuffer = true; 44 return w; 45 } 46 47 override void destroyBuffer(HipAudioBuffer* buffer) 48 { 49 alDeleteBuffers(1, &buffer.al); 50 alCheckError("Error deleting OpenAL Buffer"); 51 } 52 53 override void setBufferData(HipAudioBuffer* buffer, ubyte[] data, uint size = 0) 54 { 55 alBufferData( 56 buffer.al, 57 HipOpenALAudioPlayer.config.getFormatAsOpenAL, 58 data.ptr, 59 size == 0 ? cast(int)data.length : size, 60 decoder.getSamplerate() 61 ); 62 alCheckError("Error setting OpenAL Buffer Data"); 63 } 64 65 bool hasBuffer; 66 67 }